package com.agencia.jsf;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.component.html.HtmlDataTable;
import javax.faces.component.html.HtmlInputHidden;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;

import agencia.PaqueteEstandar;
import agencia.Temporada;
	
public class AdministrarPaquetesEstandarBean {
	
	private HtmlDataTable 			dataTable;
    private PaqueteEstandar 		dataItem = new PaqueteEstandar();
    private HtmlInputHidden 		dataItemId = new HtmlInputHidden();
	private List<PaqueteEstandar> 	paquetes;
	private List<SelectItem>		temporadas;
	private int 					cantidad = 0;
	private int 					proximoId= 1;
	private Temporada				temporada;
	
	public List<SelectItem> getTemporadas() {
		return temporadas;
	}


	public void setTemporadas(List<SelectItem> temporadas) {
		this.temporadas = temporadas;
	}


	public Temporada getTemporada() {
		return temporada;
	}


	public void setTemporada(Temporada temporada) {
		this.temporada = temporada;
	}


	public AdministrarPaquetesEstandarBean() {
		cargar();
	}
	
	
	@SuppressWarnings({ "unused", "deprecation" })
	private void cargar(){		
		
		paquetes = new ArrayList<PaqueteEstandar>();
		temporadas = new ArrayList<SelectItem>();
		Date fecha = new Date("10/10/08");
		
		for (Temporada temporada : Temporada.values()) {
			temporadas.add(new SelectItem(temporada));
		}
		
		PaqueteEstandar paqueteEstandar = new PaqueteEstandar();
        paqueteEstandar.setId(Long.valueOf(getProximoId()));
        paqueteEstandar.setNombre("Deluxe SKI");
        paqueteEstandar.determinarCategoria(5);
        paqueteEstandar.determinarCantidadPasajerosMinima(5);
        paqueteEstandar.setCantidadPasajerosMaxima(10);
        paqueteEstandar.determinarFecha(new Date("2009/07/01"));        
        paqueteEstandar.determinarTemporada(Temporada.Alta);
        
        paquetes.add(paqueteEstandar);
        cantidad++;
        actualizarProximoId();
        
        PaqueteEstandar paqueteEstandar1 = new PaqueteEstandar();
        paqueteEstandar1.setId(Long.valueOf(getProximoId()));
        paqueteEstandar1.setNombre("SKI Family");
        paqueteEstandar1.determinarCategoria(5);
        paqueteEstandar1.determinarCantidadPasajerosMinima(20);
        paqueteEstandar1.setCantidadPasajerosMaxima(100);
        paqueteEstandar1.determinarFecha(new Date("2008/10/01"));        
        paqueteEstandar1.determinarTemporada(Temporada.Baja);
        
        paquetes.add(paqueteEstandar1);
        cantidad++;
        actualizarProximoId();
        
        PaqueteEstandar paqueteEstandar2 = new PaqueteEstandar();
        paqueteEstandar2.setId(Long.valueOf(getProximoId()));
        paqueteEstandar2.setNombre("Praias do Brasil A");
        paqueteEstandar2.determinarCategoria(4);
        paqueteEstandar2.determinarCantidadPasajerosMinima(5);
        paqueteEstandar2.setCantidadPasajerosMaxima(15);
        paqueteEstandar2.determinarFecha(new Date("2009/01/01"));        
        paqueteEstandar2.determinarTemporada(Temporada.Alta);
        
        paquetes.add(paqueteEstandar2);
        cantidad++;
        actualizarProximoId();
        
        PaqueteEstandar paqueteEstandar3 = new PaqueteEstandar();
        paqueteEstandar3.setId(Long.valueOf(getProximoId()));
        paqueteEstandar3.setNombre("Praias do Brasil B");
        paqueteEstandar3.determinarCategoria(2);
        paqueteEstandar3.determinarCantidadPasajerosMinima(30);
        paqueteEstandar3.setCantidadPasajerosMaxima(70);
        paqueteEstandar3.determinarFecha(new Date("2009/01/01"));        
        paqueteEstandar3.determinarTemporada(Temporada.Alta);
        
        paquetes.add(paqueteEstandar3);
        cantidad++;
        actualizarProximoId();
        
        PaqueteEstandar paqueteEstandar4 = new PaqueteEstandar();
        paqueteEstandar4.setId(Long.valueOf(getProximoId()));
        paqueteEstandar4.setNombre("Semana Santa");
        paqueteEstandar4.determinarCategoria(3);
        paqueteEstandar4.determinarCantidadPasajerosMinima(7);
        paqueteEstandar4.setCantidadPasajerosMaxima(14);
        paqueteEstandar4.determinarFecha(new Date("2009/04/01"));        
        paqueteEstandar4.determinarTemporada(Temporada.Media);
        
        paquetes.add(paqueteEstandar4);
        cantidad++;
        actualizarProximoId();
		
		/*
		 * carga los paquetes estandard de la BD 
		 */
		
	}
	
	public void actualizarProximoId(){
		proximoId++;		
	}
	
	public int getProximoId(){
		return proximoId;
	}
	
	public String crear() {
		dataItem = new PaqueteEstandar();

		cantidad++;
		dataItemId.setValue(new Long(cantidad));
		
		return "editar";
	}

	public String editar() {
		// Obtengo la fila completa
	    dataItem = (PaqueteEstandar) dataTable.getRowData();
	    dataItemId.setValue(dataItem.getId());
	
		return "editar";
	}
	
	private void persistirPaqueteEstandar(){

	}
	
	public String guardar() {
		
		dataItem.setId(Long.valueOf(dataItemId.getValue().toString()));
		
		if (cantidad > paquetes.size()){
			dataItem.setId(Long.valueOf(getProximoId()));
			persistirPaqueteEstandar();
			paquetes.add(dataItem);
			actualizarProximoId();
		}

		return "listar";
	}
	
	public String eliminar(){
		dataItem = (PaqueteEstandar) dataTable.getRowData();
		eliminarPaqueteEstandar();
		paquetes.remove(dataItem);
		cantidad--;
		return "listar";
	}
	
	private void eliminarPaqueteEstandar(){
		
	}
	
	public String listar() {
		return null;
	}
	
	public String listarHoteles() {
		dataItem = (PaqueteEstandar) dataTable.getRowData();
		Long aux = new Long(dataItem.getCategoria());
		
		FacesContext context = FacesContext.getCurrentInstance();		
		HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
		request.getSession().setAttribute("idPaquete", dataItem.getId());
		request.getSession().setAttribute("categoria", aux);
		
		return "listarHoteles";
	}
	
	public String listarExcursiones() {
		dataItem = (PaqueteEstandar) dataTable.getRowData();
		Long aux = new Long(dataItem.getCategoria());
		
		FacesContext context = FacesContext.getCurrentInstance();		
		HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
		request.getSession().setAttribute("idPaquete", dataItem.getId());	
		request.getSession().setAttribute("categoria", aux);
		request.getSession().setAttribute("fecha", dataItem.getFecha());
		return "listarExcursiones";
	}
	
	public String listarVuelos() {
		dataItem = (PaqueteEstandar) dataTable.getRowData();
		Long aux = new Long(dataItem.getCategoria());
		
		FacesContext context = FacesContext.getCurrentInstance();		
		HttpServletRequest request= (HttpServletRequest)context.getExternalContext().getRequest();
		request.getSession().setAttribute("idPaquete", dataItem.getId());
		request.getSession().setAttribute("categoria", aux);
		request.getSession().setAttribute("fecha", dataItem.getFecha());
		return "listarVuelos";
	}

	public String volver() {
		// Si se creo uno nuevo, vuelvo el conteo hacia atras
		cantidad = paquetes.size();

		return "volver";
	}

	//-------------------------------------
	
	public HtmlDataTable getDataTable() {
		return dataTable;
	}

	public void setDataTable(HtmlDataTable dataTable) {
		this.dataTable = dataTable;
	}

	public PaqueteEstandar getDataItem() {
		return dataItem;
	}

	public void setDataItem(PaqueteEstandar dataItem) {
		this.dataItem = dataItem;
	}

	public HtmlInputHidden getDataItemId() {
		return dataItemId;
	}

	public void setDataItemId(HtmlInputHidden dataItemId) {
		this.dataItemId = dataItemId;
	}

	public int getCantidad() {
		return cantidad;
	}

	public void setCantidad(int cantidad) {
		this.cantidad = cantidad;
	}

	public List<PaqueteEstandar> getPaquetes() {
		return paquetes;
	}

	public void setPaquetes(List<PaqueteEstandar> paquetes) {
		this.paquetes = paquetes;
	}
}
